﻿using Autofac;
using System.Reflection;

namespace BW.MesProject.Equipment.Host
{
    /// <summary>
    /// Autofac 模块，用于批量注册服务类到依赖注入容器。
    /// </summary>
    public class MyAutoFacFiles : Autofac.Module
    {
        /// <summary>
        /// 重写 Load 方法，批量注册以 Service 结尾的类型为其实现的接口，生命周期为 InstancePerLifetimeScope。
        /// </summary>
        /// <param name="builder">Autofac 容器构建器</param>
        protected override void Load(Autofac.ContainerBuilder builder)
        {
            // 加载基础设施层程序集
            var assembly = Assembly.Load("BW.MesProject.Equipment.Infrastructure");

            // 注册所有以 Service 结尾的类型为其实现的接口，生命周期为每请求一个实例
            builder.RegisterAssemblyTypes(assembly)
                .Where(t => t.Name.EndsWith("Service"))
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();

            // 加载应用层程序集
            var assembly1 = Assembly.Load("BW.MesProject.Equipment.Application");

            // 注册所有以 Service 结尾的类型为其实现的接口，生命周期为每请求一个实例
            builder.RegisterAssemblyTypes(assembly1)
                .Where(t => t.Name.EndsWith("Service"))
                .AsImplementedInterfaces()
                .InstancePerLifetimeScope();

            // 调用基类的 Load 方法
            base.Load(builder);
        }
    }
}
